package store;

import org.jdom.Element;
import exceptions.XmlException;

public class PortataPiatto extends Portata {
	int nPorzioni;
	Ricetta ricetta;
	
	private PortataPiatto() {}
	
	public PortataPiatto(int nPorzioni, Ricetta ricetta) {
		this.nPorzioni = nPorzioni;
		this.ricetta = ricetta;
	}
	
	public int getnPorzioni() {
		return nPorzioni;
	}
	
	public Ricetta getRicetta() {
		return ricetta;
	}
	
	@Override
	public Element toXml() {
		Element portata = new Element("portata_piatto");
		portata.addContent(new Element("numero_porzioni").setText(Integer.toString(nPorzioni)));
		portata.addContent(new Element("ricetta").setText(ricetta.getNome()));
		return portata;
	}
	
	public static PortataPiatto fromXml(Element portata, boolean check) throws XmlException {
		PortataPiatto p = new PortataPiatto();
		p.nPorzioni = Integer.parseInt(portata.getChildText("numero_porzioni"));
		if (check) {
			try {
				p.ricetta = Ricetta.fromXml(TutteRicette.getTutteRicette().getRicettaElement(portata.getChildText("ricetta")), check);
			} catch (Exception e) {
				throw new XmlException(e);
			}
		} else p.ricetta = new Ricetta(portata.getChildText("ricetta"));
		return p;
	}
	
	@Override
	public String vis() {
		switch (getRicetta().getInfo().getUnitaPorzioni()) {
			case persona:
				return ricetta + " per " + nPorzioni + " persone";
			case biscotto:
				return nPorzioni + " biscotti " + ricetta;
			case altro:
				String p;
				if (ricetta.getInfo().getCustom() != null && !ricetta.getInfo().getCustom().isEmpty())
					p = ricetta.getInfo().getCustom();
				else p = "porzioni";
				return nPorzioni + " " + p + " di " + ricetta;
			case pezzo:
				return nPorzioni + " pezzi di " + ricetta;
			default:
				return null;
		}
	}
	
	@Override
	public String toString() {
		return vis();
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + nPorzioni;
		result = prime * result + ((ricetta == null) ? 0 : ricetta.hashCode());
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;
		if (obj == null) return false;
		if (getClass() != obj.getClass()) return false;
		PortataPiatto other = (PortataPiatto)obj;
		if (nPorzioni != other.nPorzioni) return false;
		if (ricetta == null) {
			if (other.ricetta != null) return false;
		} else if (!ricetta.equals(other.ricetta)) return false;
		return true;
	}
}
